package city.spring.modules.oldman.service;

import city.spring.modules.oldman.entity.OldmanInfoEntity;
import city.spring.modules.oldman.repository.OldmanInfoRepository;
import city.spring.modules.oldman.vo.OldmanVO;
import city.spring.service.BaseService;

import java.util.List;

/**
 * Service：老人信息
 *
 * @author 侯坤林
 * @date 2020-05-23 04:39:16
 */
public interface OldmanInfoService extends BaseService<OldmanInfoRepository, OldmanInfoEntity> {
    String CACHE_NAME = "oldman_info";

    /**
     * 获取老人信息
     *
     * @param id 老人ID
     * @return 老人信息视图对象
     */
    OldmanVO getOldmanInfo(String id);

    /**
     * 业务处理：保存一个 <strong>老人信息</strong>
     *
     * @param entity 老人信息
     */
    void saveOldmanInfo(OldmanInfoEntity entity);

    /**
     * 业务处理：修改一个 <strong>老人信息</strong>
     *
     * @param entity 老人信息
     */
    void updateOldmanInfo(OldmanInfoEntity entity);

    /**
     * 业务处理：删除一个 <strong>老人信息</strong>
     *
     * @param primaryKey 主键ID
     */
    void deleteOldmanInfo(String primaryKey);

    /**
     * 业务处理：删除多个 <strong>老人信息</strong>
     *
     * @param primaryKeys 主键ID列表
     */
    void deleteOldmanInfo(List<String> primaryKeys);

    /**
     * 查找老人状态为正式入住、试入住的老人
     *
     * @return
     */
    List<OldmanInfoEntity> oldmanInfoByStatus();

    /**
     * 退住办理
     *
     * @param oldmanId 老人ID
     */
    void retreat(String oldmanId);

    /**
     * 获取该日期的老人列表
     *
     * @param datevalue
     * @return
     */
    List<OldmanInfoEntity> getBirthList(String datevalue);

    /**
     * 获取已进行入院缴费的老人列表
     *
     * @return
     */
    List<OldmanVO> getFirstPayOldList();

    /**
     * 修改老人状态从试入住转为正式入住
     *
     * @param id
     * @param entity
     */
    void transferCheckin(String id, OldmanInfoEntity entity);

    /**
     * 入院且没有退院的老人，筛选截止到本月之前有未交费的老人列表
     *
     * @return
     */
    List<OldmanVO> getArrearsOldList();

    /**
     * 获取评估登记所需的老人信息
     *
     * @param id
     * @return entity
     */
    OldmanInfoEntity estimateCheckInfo(String id);
}
